import { useAuthStore } from '@/stores/auth'
import { useUserStore } from '@/stores/user'
import axios from 'axios'
import { ElMessage, ElLoading } from 'element-plus'

// 创建 axios 实例
const http = axios.create({
    baseURL: '/api',
    timeout: 20000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json;charset=UTF-8',
    },
})

// 请求拦截器
http.interceptors.request.use(
    config => {
        const token = localStorage.getItem('authToken')
        if (token) {
            config.headers.Authorization = `Bearer ${token}`
        }
        const lang = localStorage.getItem('lang') || 'zh_hk'
        config.params = { ...config.params, lang }
        return config
    },
    error => {
        return Promise.reject(error)
    },
)
// 响应拦截器
http.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        return response
    },
    error => {
        // 对响应错误做点什么
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    // 处理未授权
                    const authStore = useAuthStore()
                    const userStore = useUserStore()
                    authStore.clearToken()
                    localStorage.setItem(`redirectPath_${userStore.userinfoL?.id}`, window.location.pathname + window.location.search)
                    window.location.href = '/' // 或者用 router 的替代方案
                    break
                case 404:
                    // 处理未找到
                    break
                // 其他状态码处理
            }
        }
        // 超时处理
        if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
            ElMessage.error('请求超时，请检查网络或稍后重试！')
        }
        return Promise.reject(error)
    },
)

export default http
